Как создавался Ribbon XML Editor

Начало

Весной 2007 года я поставил себе только что вышедший в то время Microsoft Office 2007, и был глубоко разочарован его новым интерфейсом. На панелях, отжирающих у документа отнюдь не маленький кусок вертикального пространства, присутствовали кнопки, которые я фактически не использовал, тогда как чтобы добраться до действительно нужных мне функций, приходилось изрядно повозиться.

Конечно же, я полез в настройки интерфейса, чтобы настроить его под себя, как это делал с прекрасно зарекомендовавшими себя панелями инструментов. Каково же было моё изумление, когда я увидел, что новый интерфейс практически не поддаётся никакой настройке!

Вот тогда я и ринулся в пучину Интернета, чтобы узнать, как же всё-таки настроить интерфейс под свои нужды. Многодневные поиски принесли результат. Оказалось, что теоретически можно добавлять на ленту свои вкладки и размещать на них существующие кнопки так, как это будет удобно именно мне. Но для этого требуется внедрить в файл шаблона нового документа Normal.dot некую XML-структуру, описывающую эту новую вкладку.

Об XML я имел довольно отдалённое представление, но поскольку альтернативы у меня всё равно не было, я принялся скрупулёзно изучать предмет. Изучение материалов по теме привело к тому, что я добился-таки изменения ленты, добавив на неё свою вкладку с кнопкой путём создания необходимого для этого xml-файла в блокноте. Но писать руками малознакомые конструкции было довольно утомительно, и я понял, что без автоматизации этого процесса создание полноценной вкладки затянется очень надолго.

Вот тогда и пришла идея создания простейшего редактора, в котором xml-конструкции набирались бы не руками, а путём нажатия соответствующих кнопок. Так в мае 2007 года появилась первая версия редактора RibonXMLEditor, которую я тут же выложил в Интернет на всеобщее обозрение.

Это был первый и в то время единственный редактор подобного рода. Хотя, справедливости ради стоит отметить, что первым подобием такого редактора была всё же некая утилита от Microsoft — Custom UI Editor for Microsoft Office, но она была сделана лишь в качестве примера работы с новым интерфейсом и не получила дальнейшего развития. Кроме того, в ней отсутствовала как раз-таки автоматизация вставки xml-конструкций и были проблемы с отображением кириллицы, которая могла использоваться как в комментариях, так и в значениях параметров некоторых xml-тегов.

С помощью Ribbon XML Editor я довольно быстро сконструировал собственную вкладку, где расположил только используемые мной кнопки, и написал трилогию по теме, разместив её на своём сайте (http://novikovmaxim.narod.ru/statyi/ur_progr/word2007/word07_1.htm). На этом и успокоился.

Продолжение

Первое время было всё тихо, но начиная с 2008 года я начал получать отзывы о своей программе. Сообщали и об ошибках, и к концу 2008 года вышла новая версия редактора с исправлениями. В течение следующего, 2009 года, вышло ещё несколько минорных версий. Программа стремительно набирала популярность.

К концу 2009 года вышло существенное обновление программы, и она получила номер 2.0. С этого момента началась активная фаза развития программы и насыщение её функционалом, необходимым уже для профессионального её использования. Буквально через месяц, в январе 2010 года, вышло очередное существенное обновление программы — в неё была внедрена поддержка вышедшего недавно Microsoft Office 2010, и версия программы получила номер 3.0.

В течение 2012 года программа получила ещё несколько минорных обновлений. Надо заметить, что только ради этой программы я не удалял с компьютера старенькую среду разработки приложений — Delphi 7. Дело в том, что следующие несколько версий Delphi были не очень удачными — среда разработки переживала не лучшие времена. Затем Delphi была продана другой компании, что дало новый импульс её развитию, и новая её версия перешла на Unicode. Но это повлекло за собой существенные изменения внутри самого языка, и важные сторонние компоненты, которые я использовал в своей программе, просто перестали поддерживаться. Это был ещё один, хотя и неизбежный, удар по Delphi и по написанным на ней проектам.

Несколько раз я пытался перейти на новые компоненты, но это не удавалось. То один компонент глючил, то другой компонент никак не подключался. А копаться в старой версии Delphi уже не хотелось, поскольку рядом уже стояла новая версия среды, которая позволяла многие вещи делать быстрее и проще. Судьба дальнейшего развития Ribbon XML Editor висела на волоске.

Переход на новый уровень

С конца 2012 года, когда в сети только-только появился Microsoft Office 2013, пользователи начали спрашивать меня, когда я реализую его поддержку в своей программе. Я тогда был не в курсе, что в новой версии офиса никаких изменений в области построения интерфейса не произошло и, за исключением списка автозавершения, апгрейдить, в общем-то, практически нечего. Я же думал, что придётся вклеивать новую вкладку с третьим окном редактора для интерфейса 2013 и дополнять многие процедуры с учётом этой третьей вкладки. Поэтому я даже не совался туда. Производить какие-то кардинальные доработки в старой версии Delphi не хотелось.

В то же время у меня свербело перевести проект под новую версию Delphi, и осенью 2013 года я всё же предпринял ещё одну попытку это сделать. Основной задачей было прикрутить к Delphi XE5 компонент редактора Sсintilla. К счастью, я нашёл для него новую обёртку для Delphi — DScintilla и, наконец, компонент удалось прикрутить! Это означало только одно — новой версии быть!

Замену другому стороннему компоненту — архиватору я нашёл довольно быстро. Но все эти новые компоненты имели совсем другой интерфейс взаимодействия с окружающим программным кодом. Архиватор вообще работал иначе. Да и обёртка DScintilla оказалась просто обёрткой, без дополнительного функционала, который был у старого компонента. Поэтому я понял, что проще будет переписать весь проект с нуля, тем более, что старый код всё равно был довольно запутан и потенциально мог вызвать множественные ошибки в будущем.

Я принялся за дело и, наконец, в начале февраля 2014 года новая версия увидела свет и получила номер 4.0. Пожалуй, это была самая крупная доработка программы, хотя для пользователя это был скорее качественный, а не количественный апгрейд. В настройках появились стили подсветки синтаксиса, в редакторе — подсветка парных тегов, справка стала гипертекстовой. Кнопки элементов ленточного интерфейса в окнах редакторов теперь были сгруппированы более наглядно. Фактически же, если не считать абсолютно нового кода всего приложения, было реализовано более 30 функциональных изменений, что является абсолютным рекордом для программы.

Вскоре появилась версия 4.1 c некоторыми исправлениями допущенных погрешностей, а почти спустя год, в январе 2015 — версия 4.2, включившая в себя помимо ряда исправлений, накопившихся за год, несколько полезных функций, в числе которых возможность экспорта xml-макета интерфейса в файл, читаемый настройками ленты, начиная с MS Office 2010, а также импорта подобного файла, создаваемого настройками ленты в самом офисе.

Ввод контекстно-чувствительного автодополнения

Всё то время, пока развивалась программа, мне неоднократно поступали просьбы реализовать в ней полноценное контекстно-чувствительное автодополнение. Всё дело упиралось в трудоёмкость разработки этой функции и мою лень. Но, начиная уже с версии 4.2 я потихоньку начал прорабатывать возможность добавления этой функции.

И вот, наконец, после полутора месяцев упорной работы вышла версия 5.0, которая стала поддерживать столь долгожданную функцию! Кроме того, в программу была добавлена галерея встроенных в офис иконок, содержащая несколько тысяч изображений. Также была существенно доработана справка, включившая много дополнительной справочной информации. Программа очередной раз сделала хороший рывок вперёд.

Спустя год практически подряд вышли версии 5.1 и 5.2 с исправлением некоторых ошибок и небольшими дополнениями. Побочным эффектом устранения одного из глюков в версии 5.1 стала стилизация интерфейса. Стало возможным переключаться между несколькими визуальными темами через системное меню окна программы.

Рюшечки и плюшечки

В мае 2016 года вышло очередное крупное обновление программы. В новой версии 6.0 появилась поддержка очередной версии офиса (2016), а также доработана тематизация интерфейса программы. Появилась возможность выбора одной из сотни внешних тем. Также в этой версии было произведено ещё около десятка различных доработок и улучшений.

Поддержка Access

В феврале 2017 года вышла очередная версия 6.1, основным изменением в которой стала осторожная попытка частичной поддержки Access (автодополнение, справка и т.п.). Файлы баз данных эта версия самостоятельно ещё не открывала.

В марте 2017 года вышла версия 7.0, в которой была, наконец, реализована полная поддержка Access. Программа научилась работать с файлами баз данных.

В апреле 2017 года вышло очередное обновление 7.1 с многочисленными доработками и улучшениями.

Ровно через год, в апреле 2018 года, вышло ещё одно небольшое обновление 7.2.

Некоторое время назад при активном использовании программы с документами Access в разных системах, выяснилось, что в среде с 64-битным Офисом некоторые базы Access просто не открывались. Танцы с бубнами не помогли. Что я только ни делал, и ставил в систему 32-битные драйверы, и пытался подбирать другие компоненты доступа — всё тщетно.

После длительного исследования этого вопроса экспериментальным путём выяснилось, что если скомпилировать процедуры доступа к базе Access в 64-битное приложение, то базы начинают открываться. Как вариант, можно было выпустить программу в двух версиях, 32-битной и 64-битной, но по причине проблем с совместимостью компонентов программы, компилировать Ribbon XML Editor в 64-битный формат не представилось возможным. Тогда я пошёл другим путём.

В конце апреля 2018 года вышла версия 7.3, которая стала работать с документами Access через специальные программы-серверы, которые были скомпилированы в 32 и 64-битной версии. Если база могла открыться 32-битным приложением, запускался 32-битный сервер. Если нет — базу пытался открыть 64-битный. Такая конфигурация позволила вдобавок не напрягать пользователя мучительным выбором нужной ему версии при скачивании приложения.

Связь между приложением и сервером теперь осуществляется по протоколу TCP, поэтому при первом запуске сервера брандмауэр Windows может попросить разрешение на сетевые функции. Если запускается вторая копия редактора и в ней открывается другая база Acess, то новый сервер запускается на другом порте, следующем по порядку. Настроить диапазон портов, среди которых программа выбирает порт для связи со своим сервером, можно на странице настроек программы.

В конце мая 2018 года вышло очередное обновление программы с номером версии 7.4 с доработками функции интерактивного поиска встроенных изображений, добавлением изменяемого курсора над ссылками разного типа в справке и исправлением небольших ошибок интерфейса.

В начале июня вышла очередная версия 7.5 с доработками окна работы с таблицей внешних изображений Access. Также появилась возможность напрямую внедрять VBA-модули функций обратного вызова в документы приложений Microsoft Office.

Эволюционное развитие

На рубеже 2018-2019 годов вышла очередная версия Office 2019, что послужило толчком к выпуску обновлённой версии Ribbon XML Editor 8.0. Помимо поддержки новой версии офиса, программа перешла на новую версию интерфейсных тем, а также получила ряд других улучшений.

Была внедрена система подробного информирования о сбоях внутри программы с возможностью отправки стека вызовов по почте автору. Открытие документов, загрузка изображений и файлов настроек ленты теперь стала возможна простым перетаскиванием соответствующих файлов в окно программы. Устранены замеченные за период эксплуатации последней версии дефекты.

Через 3 месяца, в конце мая 2019 года, вышла очередная версия 8.1 с исправлениями замеченных за это время ошибок. Чуть позже вышли ещё три версии с очередными исправлениями незначительных ошибок: в конце августа — версия 8.1.1, через полгода, в конце февраля 2020 года — версия 8.1.2, и ещё через два месяца, в апреле — версия 8.1.3.

В мае 2020 года вышла версия 9.0 с большим количеством улучшений и дополнений. Из основных стоит отметить всплывающие подсказки по коду, возможность генерации шаблона для отдельной процедуры обратного вызова, новый режим автоформатирования с выравниванием атрибутов в столбик. Также были устранены обнаруженные к этому времени незначительные ошибки.

Осенью 2020 года вышли верси 9.1 (сентябрь) и 9.2 (ноябрь), а в начале 2021 года — версии 9.3 (февраль) и 9.4 (апрель) с небольшими улучшениями и исправлениями замеченных за это время ошибок и недочётов.

На сегодняшний день можно констатировать, что старейший низкоуровневый xml-редактор интерфейса MS Office — Ribbon XML Editor — продолжает успешно развиваться и совершенствоваться. Скачать его последнюю версию можно с официальной страницы программы:

http://макс.мск.рус/products/ribbonxmleditor/ribbonxmleditor.html